<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 4.0.0">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">
  <link rel="alternate" href="/atom.xml" title="dy2903的博客" type="application/atom+xml">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css">


<script id="hexo-configurations">
  var NexT = window.NexT || {};
  var CONFIG = {
    root: '/',
    scheme: 'Pisces',
    version: '7.5.0',
    exturl: false,
    sidebar: {"position":"left","display":"post","offset":12,"onmobile":false},
    copycode: {"enable":false,"show_result":false,"style":null},
    back2top: {"enable":true,"sidebar":false,"scrollpercent":false},
    bookmark: {"enable":false,"color":"#222","save":"auto"},
    fancybox: false,
    mediumzoom: false,
    lazyload: false,
    pangu: false,
    algolia: {
      appID: '',
      apiKey: '',
      indexName: '',
      hits: {"per_page":10},
      labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
    },
    localsearch: {"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},
    path: '',
    motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
    translation: {
      copy_button: 'Copy',
      copy_success: 'Copied',
      copy_failure: 'Copy failed'
    },
    sidebarPadding: 40
  };
</script>

  <meta name="description" content="数据保护 所谓数据保护是指对当前时间点上的数据进行备份，如果说一份数据被误删除了，可以通过备份数据找回来。  从底层来分，数据保护可以分为文件级保护和块级保护。 文件级备份 文件级备份：将磁盘上所有文件通过调用文件系统接口备份到另一个介质上。也就是把数据以文件形式读出，然后存储在另一个介质上面。  此时备份软件只能感知到文件这一层。 我们知道一般来说，文件在原来的介质上，可以是不连续存放的，通过文">
<meta property="og:type" content="article">
<meta property="og:title" content="大话存储，学习笔记（16章），数据保护和备份技术">
<meta property="og:url" content="https:&#x2F;&#x2F;duyang2903.gitee.io&#x2F;2019&#x2F;11&#x2F;15&#x2F;%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%8816%E7%AB%A0%EF%BC%89%EF%BC%8C%E6%95%B0%E6%8D%AE%E4%BF%9D%E6%8A%A4%E5%92%8C%E5%A4%87%E4%BB%BD%E6%8A%80%E6%9C%AF&#x2F;index.html">
<meta property="og:site_name" content="dy2903的博客">
<meta property="og:description" content="数据保护 所谓数据保护是指对当前时间点上的数据进行备份，如果说一份数据被误删除了，可以通过备份数据找回来。  从底层来分，数据保护可以分为文件级保护和块级保护。 文件级备份 文件级备份：将磁盘上所有文件通过调用文件系统接口备份到另一个介质上。也就是把数据以文件形式读出，然后存储在另一个介质上面。  此时备份软件只能感知到文件这一层。 我们知道一般来说，文件在原来的介质上，可以是不连续存放的，通过文">
<meta property="og:locale" content="en">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-a6bced62fd116930.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-169005807c63817b.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-b42ac31f42c25652.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-b4b02e5a773252dd.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-34bfa59207890ccb.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-583efc2c5ddb3b51.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-d793249e5cd493dd.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-da025bc9a1a55a3e.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-a6e5df188123c7c9.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-0b62f79b708a89c1.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-4385052abbdc504d.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-aa2e8744e3bad56e.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-356bfab5550fb50a.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:updated_time" content="2019-11-13T13:27:14.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-a6bced62fd116930.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">

<link rel="canonical" href="https://duyang2903.gitee.io/2019/11/15/%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%8816%E7%AB%A0%EF%BC%89%EF%BC%8C%E6%95%B0%E6%8D%AE%E4%BF%9D%E6%8A%A4%E5%92%8C%E5%A4%87%E4%BB%BD%E6%8A%80%E6%9C%AF/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome: false,
    isPost: true,
    isPage: false,
    isArchive: false
  };
</script>

  <title>大话存储，学习笔记（16章），数据保护和备份技术 | dy2903的博客</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-meta">

    <div>
      <a href="/" class="brand" rel="start">
        <span class="logo-line-before"><i></i></span>
        <span class="site-title">dy2903的博客</span>
        <span class="logo-line-after"><i></i></span>
      </a>
    </div>
        <p class="site-subtitle">与肝胆人共事，从无字句读书</p>
  </div>

  <div class="site-nav-toggle">
    <div class="toggle" aria-label="Toggle navigation bar">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>
</div>


<nav class="site-nav">
  
  <ul id="menu" class="menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-fw fa-home"></i>Home</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>Archives</a>

  </li>
  </ul>

</nav>
</div>
    </header>

    
  <div class="back-to-top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content">
            

  <div class="posts-expand">
      
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block " lang="en">
    <link itemprop="mainEntityOfPage" href="https://duyang2903.gitee.io/2019/11/15/%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%8816%E7%AB%A0%EF%BC%89%EF%BC%8C%E6%95%B0%E6%8D%AE%E4%BF%9D%E6%8A%A4%E5%92%8C%E5%A4%87%E4%BB%BD%E6%8A%80%E6%9C%AF/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="dy2903">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="dy2903的博客">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          大话存储，学习笔记（16章），数据保护和备份技术
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">Posted on</span>

              <time title="Created: 2019-11-15 10:48:24" itemprop="dateCreated datePublished" datetime="2019-11-15T10:48:24+08:00">2019-11-15</time>
            </span>
              <span class="post-meta-item">
                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                <span class="post-meta-item-text">Edited on</span>
                <time title="Modified: 2019-11-13 21:27:14" itemprop="dateModified" datetime="2019-11-13T21:27:14+08:00">2019-11-13</time>
              </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <h1 id="数据保护"><a href="#数据保护" class="headerlink" title="数据保护"></a>数据保护</h1><blockquote>
<p>所谓数据保护是指对<strong>当前时间点</strong>上的数据进行备份，<br>如果说一份数据被误删除了，可以通过<strong>备份数据</strong>找回来。</p>
</blockquote>
<p>从底层来分，数据保护可以分为文件级保护和块级保护。</p>
<h2 id="文件级备份"><a href="#文件级备份" class="headerlink" title="文件级备份"></a>文件级备份</h2><blockquote>
<p>文件级备份：将磁盘上所有文件通过<strong>调用文件系统接口</strong>备份到另一个介质上。也就是把数据以文件形式读出，然后存储在另一个介质上面。</p>
</blockquote>
<p>此时备份软件只能感知到<strong>文件</strong>这一层。</p>
<p>我们知道一般来说，文件在原来的介质上，可以是不连续存放的，通过文件系统来管理和访问。当备份到新的介质上以后，文件完全可以<strong>连续存放</strong>。正因为如此，没有必要备份<strong>元数据</strong>，因为利用新介质进行恢复的时候，反正会重构文件系统。</p>
<h2 id="块级备份"><a href="#块级备份" class="headerlink" title="块级备份"></a>块级备份</h2><blockquote>
<p>块级备份就是不管块上是否有数据，不考虑文件系统的逻辑，备份块设备上的每个块。</p>
</blockquote>
<p>这样好处是不通过调用文件系统接口，速度更快，缺点的是备份的时候会把所有的块复制一遍，但是实际上很多扇区的数据是不对应真实文件的，也就是会备份很多僵尸扇区。而且备份之后，原来不连续的文件一样是不连续的文件，有很多的碎片。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-a6bced62fd116930.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<h1 id="高级数据保护"><a href="#高级数据保护" class="headerlink" title="高级数据保护"></a>高级数据保护</h1><h2 id="远程文件复制"><a href="#远程文件复制" class="headerlink" title="远程文件复制"></a>远程文件复制</h2><blockquote>
<p>远程文件复制：通过网络传输到<strong>异地容灾点</strong>。典型的代表是rsync异步远程文件同步软件。可以监视文件系统的动作，将文件的变化，同步到异地站点。增量复制。</p>
</blockquote>
<h2 id="远程卷镜像"><a href="#远程卷镜像" class="headerlink" title="远程卷镜像"></a>远程卷镜像</h2><p>这是基于<strong>块</strong>的远程备份。与<code>远程文件复制</code>不同的地方在于，是把<strong>块数据</strong>备份到异地站点。又可以分为同步和异步复制。</p>
<ul>
<li>同步复制：必须等数据复制到<strong>异地站点</strong>以后，才通报上层IO成功消息</li>
<li>异步复制：写入成功即可回复成功，然后通过网络传输到异地。不能保证一致性，但是上层响应快。</li>
</ul>
<p>基于块的备份措施，一般都是在底层设备上进行，不耗费主机资源。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-169005807c63817b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<h2 id="快照"><a href="#快照" class="headerlink" title="快照"></a>快照</h2><p>远程镜像确实是对生产数据一种非常好的保护，但是需要镜像卷一直在线，主卷有写IO，那么镜像卷也需要有写IO。</p>
<p>如果想对<strong>镜像卷</strong>进行备份，需要将停止主卷的读写，然后将两个卷的镜像关系分离。所以当恢复主卷的IO的时候，镜像卷不会再被读写。然后才可以备份镜像卷的数据。</p>
<p>这样会存在一个问题，主卷上还继续有IO，将会导致数据与备份的镜像不一致。所以主卷上所有的写IO动作，会以位图bitmap方式记录下来，bitmap上的每个位表示卷上的一个块，0表示未写入，1表示已写入，所以当拆分镜像以后，被写入了数据，程序将bitmap文件对应位从0变为1。备份完成以后，再做数据同步即可。</p>
<p>可以看出上述过程比较的繁琐，而且需要占用一块和主卷一样大小的镜像卷。</p>
<p>快照技术就是为了解决这种问题，其<strong>基本思想</strong>是抓取某一时间点磁盘卷上的所有数据。<br><img src="http://upload-images.jianshu.io/upload_images/1323506-b42ac31f42c25652.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>快照分为：基于文件系统的快照和基于物理卷的快照</p>
<p>下面介绍一下快照的底层原理。</p>
<h3 id="基于文件系统的快照"><a href="#基于文件系统的快照" class="headerlink" title="基于文件系统的快照"></a>基于文件系统的快照</h3><blockquote>
<p>文件系统管理的精髓：链表、B树、位图，也就是元数据</p>
</blockquote>
<p>文件系统</p>
<ul>
<li><p>将扇区组合成更大的逻辑块来降低管理规模。NTFS最大块可以到4KB，也就是8个扇区一组一个簇（Block），这样可以减少管理成本。</p>
</li>
<li><p>文件系统会创建所管理存储空间上所有簇的<strong>位图</strong>文件。每个位代表卷上的簇（或者物理扇区）是否被使用，如果被使用，则置1。</p>
</li>
<li><p>文件系统保存一份文件和其对应簇号的映射链。因为映射链本身和簇位图也是文件，也有自己的映射链，所以针对重要的元数据，有一个固定的入口：<code>root inode</code></p>
</li>
</ul>
<p>写入新数据</p>
<ul>
<li><p>查找簇位图，找位值为0的簇号，</p>
</li>
<li><p>计算所需空间， 分配簇号给文件</p>
</li>
<li><p>将数据写入簇，再去<code>文件——簇号映射图</code>更新</p>
</li>
<li><p>将对应的簇映射关系记录下来，到簇位图将对应位置改为1.</p>
</li>
</ul>
<p>删除数据</p>
<ul>
<li><p>直接在簇号映射链中抹掉，</p>
</li>
<li><p>簇位图对应簇改为0</p>
</li>
</ul>
<p>可以看出删除数据实际上不会抹掉实际的数据。</p>
<p>** 所以，最重要的不是数据，而是文件——<code>簇号映射链和位图</code>等元数据。**</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-b4b02e5a773252dd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>也就是说我们要做备份，<strong>只需要把某时刻的文件系统中的映射图表保存下来。</strong>但是必须保证卷上的数据不被IO写入了，同时又要不应用还不能中断。既然原来的空间不能再写了，我们可以写到其他的<strong>空闲区域。</strong></p>
<ul>
<li><p>思路一：Copy on First Write (CoFW)，</p>
<p>  在覆盖数据块之前，需要将被覆盖的数据块内容复制出来，放到空闲的空间。</p>
<p>  系统中将有两套元数据链，<strong>原来的元数据指向当前，快照的元数据链指向历史</strong>。原来的存储空间永远是最新的数据，历史数据会逐渐搬出到空闲空间里面。</p>
</li>
</ul>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-34bfa59207890ccb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-583efc2c5ddb3b51.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<ul>
<li><p>思路二：Redirect on First Write,(RoFW)。</p>
<p>  先复制元数据，然后将针对<strong>源文件</strong>的更改都<strong>重定向</strong>到空余空间，同时<strong>更新元数据</strong>。</p>
<p>  与<code>CoFW</code>不同的是，原来的数据块不会被覆盖。同样的，系统也有两套元数据，一套是快照保存下来的，永远不更新，一套是源文件系统的，不断的更新。</p>
<p>  <strong>其实只有首次覆盖的时候，才重定向，因为重定向以后的数据块，哪怕被覆盖了，也不影响之前快照保存的数据了。</strong></p>
</li>
</ul>
<p>下图为生成两个快照之后系统处理流程。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-d793249e5cd493dd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"><br>[图片上传失败…(image-5cb224-1518689106646)]</p>
<p>到这一步，看上去挺完美，实际上存在一个问题：如果<code>元数据</code>特别大怎么办？对于海量庞大的文件系统，元数据量可能到GB级别。如果复制的话，时间上仍然太多。</p>
<p>我们可以回头想想，实际上元数据可以看做指针，指向具体存储的位置。我们复制到元数据，相当于复制了一堆指针。现在元数据太多了，我们能不能把这个<strong>元数据链</strong>的指针给复制了？当然可以，元数据有个<code>根入口块</code>，或者称为<code>Super Block</code>，这个块是固定不变的，里面存放有指向下一级元数据链块的指针。</p>
<p>那么操作系统每次载入元数据的时候，都需要从这个地址读入Super Block，从而一层一层的遍历。</p>
<p>下图为只复制Super Block以后的RoFW模式：</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-da025bc9a1a55a3e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<h3 id="基于物理卷的快照"><a href="#基于物理卷的快照" class="headerlink" title="基于物理卷的快照"></a>基于物理卷的快照</h3><p>基于物理卷的快照比文件系统快照要简单得多。因为LUN一般在底层磁盘上是恒定的，不像文件系统一样可以随机细粒度的分布。所以可以认为<strong>LUN的元数据就是在底层磁盘的起始和结束地址</strong></p>
<p>这样在快照的时候，需要复制的元数据就更少了，但是完成了以后，需要按照一定粒度来做CoFW或者RoFW，还需要记录更多数据映射指针，就比较难受了。</p>
<p>对于实现了<strong>块级虚拟化</strong>的系统如NetApp,XIV,3PAR等，它们的LUN在底层位置是不固定的，LUN就相当于一个文件，存在元数据链来进行映射管理的维护，所以这些系统实现快照的原理与文件系统快照类似。</p>
<p>基于物理卷的快照，相当于给物理卷增加了“卷扇区映射管理系统”。在底层卷实现快照，可以减轻文件系统的负担。</p>
<p>卷扇区方都是用LBA来编号的，实现快照的时候，程序首先保留一张<strong>初始LBA表</strong>，每当有新的写入请求的时候，重定向到另一个地方，并在初始的LBA表中做好记录。比如</p>
<blockquote>
<p>原始LBA：卷A的10000号，映射到LBA：卷B的100号。</p>
</blockquote>
<p>值得说明的是，<strong>文件系统无法感知重定向，文件系统在它的映射图里面还是记录了原始的LBA地址</strong>。</p>
<p>此时如果来了新的写IO，有两种方式一种是Write Redirect 一种是Copy on Write</p>
<p>所谓Write Redirect就是将文件系统的读写请求，重定向到卷B，这样每次IO其实都会查找快照映射表，降低了性能。所以引入了Copy on Write</p>
<p>所谓Copy on write，就是当写请求来的时候，先把原来的扇区的数据复制一份到空闲卷，然后将新数据写入原卷。不过这种复制操作只发生在<strong>原卷某个或者快照之后从未更新过的块</strong>上面，若是某个块在快照之后更新过了，说明之前的数据已经转移走了，可以放心的覆盖。</p>
<p>所以Copy on Write实际上是让旧数据先占着位置，等新数据来了以后先把原来的数据复制走，再更新，而且一旦更新了一次，可以直接覆盖。</p>
<p><strong>带来的好处是 ，原卷上的数据随时是最新的状态，每个IO可以直接访问原卷的地址，而不需要遍历映射表。</strong></p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-a6e5df188123c7c9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<h3 id="RoFW-方式与CoFW方式比较"><a href="#RoFW-方式与CoFW方式比较" class="headerlink" title="RoFW 方式与CoFW方式比较"></a>RoFW 方式与CoFW方式比较</h3><p>不管是RoFW还是CoFW,只要上层向<strong>快照后没有更新过的数据块</strong>进行写，都需要占用一个新的块。所以如果将所有扇区块都更新了，新卷的容量和原来的容量应该一样大，但是通常不会覆盖百分之百，所以只要预设原容量的30%即可。</p>
<p><strong>IO资源消耗：</strong></p>
<ul>
<li><p>CoFW方式下，如果要更新一个从未更新的块，需要复制出来，写到新卷，然后覆盖原来的块，需要：<strong>一次读，2写</strong>。</p>
</li>
<li><p>RoFW方式下，只需要一次写即可，也就是直接重定向到新卷上，然后更新映射图中的指针（在内存中进行）。</p>
</li>
</ul>
<blockquote>
<p>所以RoFW相对CoFW方式在IO资源消耗与IO延迟上有优势。</p>
</blockquote>
<p>由于只有首次覆盖才会Copy或者Redirect，那么如何<strong>区分是否是首次覆盖呢</strong>？可以使用记录表（文件级快照）或者位图（卷快照）来记录每个块是否被覆盖过。</p>
<p>对于<strong>读IO</strong>，</p>
<ul>
<li><p>CoFW：因为总是更新的源卷，所以源卷总是代表最新的状态，所以任何读IO都会发到源来执行</p>
</li>
<li><p>RoFW：需要首先查询位图来确定目标地址是否被处理过，如果是，则转向重定向后的地址。</p>
<p>  RoFW会影响<strong>读性能</strong>，因为重定向出去以后，数据块排布都是乱的，如果把快照删除后，不好清理战场，严重影响后续的读写性能。</p>
</li>
</ul>
<p>综合来说，RoFW比较吃计算资源，而CoFW比较耗费IO资源。</p>
<p>我们知道其实一般来说读比写多，<strong>当覆盖第二次</strong>以后</p>
<ul>
<li><p>CoFW不会发生IO惩罚，读IO一直没有惩罚</p>
</li>
<li><p>对于RoFW，就算完全被Redirect过了，对于读或者写IO，均需要遍历位图，永远无法摆脱对计算资源的消耗。</p>
</li>
</ul>
<p>尤其在LUN卷级快照下，原本卷在底层磁盘分布式是定死的，寻址非常迅速。但是RoFW引入了，LUN的块随机定向到其他的空间的，所以需要记录新的指针链，而且被写出的块不是连续排列的。对性能影响非常明显的。</p>
<p>绝大多数的厂商使用的还是<strong>CoFW</strong>，但是一些本来就使用LUN随机分块分布模式的存储系统比如XIV,NetApp等，都使用RoFW，因为原本其LUN的元数据链就很复杂，而且原来就是随机分布的，RoFW的后遗症对它们反而是正常的。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-0b62f79b708a89c1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<h3 id="快照的意义"><a href="#快照的意义" class="headerlink" title="快照的意义"></a>快照的意义</h3><p>快照所保存下来的卷数据，相当于<strong>一次意外掉电之后卷上的数据</strong>。怎么理解?</p>
<p>上层应用和文件系统都有缓存，<strong>文件系统缓存的是文件系统的元数据和文件的实体数据。</strong>每隔一段时间（Linux一般是30s）批量Flush到磁盘上。而且不是只做一次IO，有可能会对磁盘做多次IO。如果快照生成的时间恰恰在这连续的IO之间，那么此时卷上的数据实际上有可能不一致。</p>
<p>文件系统的机制是先写入数据到磁盘，元数据保存在缓存里面，最后再写元数据。因为如果先写元数据，突然断电了，那么元数据对应的僵尸扇区的数据会被认为是文件的，显然后果不堪设想。</p>
<blockquote>
<p>总之，快照极可能生成不一致的数据。</p>
</blockquote>
<p><strong>那么为什么还要用快照呢？</strong></p>
<ul>
<li>因为快照可以任意生成，而且占用的空间又不大，更重要的是可以在线恢复，不用停机只需要在内存中做IO重定向，那么上层访问就变成以前时间点的数据了。</li>
</ul>
<p><strong>但是快照会存在不一致的问题，如何解决？</strong></p>
<p>既然快照无异于一次磁盘掉电，那么利用快照恢复数据之后，<strong>文件系统可以进行一致性检查</strong>，数据库也会利用日志来使数据文件处于一致。</p>
<p>另外，现在主流的快照解决方案是在主机上安装一个<code>代理</code>，<strong>执行快照前，先通知文件系统将缓存中的数据全部Flush到磁盘，然后立即生成快照。</strong></p>
<ul>
<li><p>快照还可以预防数据<strong>逻辑损坏</strong>，也就是比如T1时刻，做了快照，T2时刻，因为管理员操作不当，误删了一个文件，T3的时候，进行了全备份操作。此时，这个文件看似永久丢失了，其实，此时还可以通过快照恢复这个文件。</p>
</li>
<li><p>快照还可以降低一致性备份的窗口。如果没有快照，要对某个卷进行一致性备份，需要暂停写IO，所以<code>备份窗口</code>比较长，需要等待备份停止以后才能继续写IO。使用快照的话，只需要复制元数据，然后在后台进行备份，降低了影响。</p>
</li>
<li><p>备份完毕以后，如何能检测数据是否是真一致的？若没有快照，需要将备份数据恢复到独立的物理空间里面，挂载到另一台机器上。有了快照，可以将快照直接挂载到另一台主机，避免了数据物理恢复导入的过程。<br><img src="http://upload-images.jianshu.io/upload_images/1323506-4385052abbdc504d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
</li>
</ul>
<h2 id="卷Clone"><a href="#卷Clone" class="headerlink" title="卷Clone"></a>卷Clone</h2><p>快照类似于某时刻的影子，而克隆则是某时刻的实体。每时刻生成了一份可写的快照，就叫对卷某时刻的一份Clone。然后这份Clone内容每被修改的部分是与源卷共享的，所以源卷没了，则Clone就没了，所以叫<code>虚拟Clone</code></p>
<p>如果把数据复制出来，生成一个独立的卷，则就叫<code>Split Clone</code>，也就是可以得到<code>实Clone</code>。</p>
<p>卷Clone最大的好处在于可以瞬间生成针对某个卷可写的镜像，而不管卷的数据量有多大。</p>
<h1 id="数据备份系统的基本要件"><a href="#数据备份系统的基本要件" class="headerlink" title="数据备份系统的基本要件"></a>数据备份系统的基本要件</h1><ul>
<li>备份对象：需要进行备份的备份源。</li>
<li>备份目的：磁盘、磁带等介质</li>
<li>备份通路：网络</li>
<li>备份执行引擎：<strong>备份软件</strong></li>
<li>备份策略</li>
</ul>
<p>下面重点介绍一下备份目的、备份通路、备份引擎</p>
<h2 id="备份目的"><a href="#备份目的" class="headerlink" title="备份目的"></a>备份目的</h2><h3 id="备份到本地磁盘"><a href="#备份到本地磁盘" class="headerlink" title="备份到本地磁盘"></a>备份到本地磁盘</h3><p>备份目的地是在本地的磁盘，则只需要将数据备份到本地磁盘的另外分区中或者目录中。</p>
<p>这样不需要网络，缺点是对备份对象自己的性能影响大。还会对其他的IO密集型程序造成影响。</p>
<p>这种方式一般用于不关键的应用和非IO密集型应用。比如E-mail，对转发实时性要求不高。</p>
<h3 id="备份到SAN上的磁盘"><a href="#备份到SAN上的磁盘" class="headerlink" title="备份到SAN上的磁盘"></a>备份到SAN上的磁盘</h3><p>备份到SAN上的磁盘，就是将需要备份的数据，从本次磁盘读入内存，再写入HBA卡缓冲区，然后再通过线缆传送到磁盘阵列上。</p>
<ul>
<li><p>优点：只耗费SAN公用网络带宽，对主体影响小。</p>
</li>
<li><p>缺点：对公共网络资源和出口带宽有影响。</p>
</li>
</ul>
<h3 id="备份到NAS目录"><a href="#备份到NAS目录" class="headerlink" title="备份到NAS目录"></a>备份到NAS目录</h3><p>备份到NAS目录就是将数据备份到远程共享目录中。比如window中常用的文件夹共享。因为数据一般是通过以太网进行传递的，占用了前端的网络带宽，但是相对廉价，不需要部署SAN</p>
<h3 id="备份到磁带库"><a href="#备份到磁带库" class="headerlink" title="备份到磁带库"></a>备份到磁带库</h3><p>现在出现一种虚拟磁带库，即用磁盘来模拟磁带，对主机来说看到的是一台磁带库，实际上是一台磁盘阵列，主机照样使用磁带库一样来使用虚拟磁带库。要做到这点，就必须在磁盘阵列的控制器上做虚拟化操作，也就是实现协议转换器的作用。</p>
<p>可以带来了的好处是：</p>
<ul>
<li>速度提升</li>
<li>避免机械手这种复杂的机械装置</li>
<li>管理方便。</li>
</ul>
<h3 id="信息生命周期管理"><a href="#信息生命周期管理" class="headerlink" title="信息生命周期管理"></a>信息生命周期管理</h3><p>将使用不频繁的数据移动到低速、低成本的设备上。比如只给视频应用分配20GB的空间，但是报告有500GB的空间，剩下的空间是在在磁带库上。</p>
<h3 id="分级存储"><a href="#分级存储" class="headerlink" title="分级存储"></a>分级存储</h3><ol>
<li><p>一线磁盘阵列</p>
</li>
<li><p>二线虚拟磁带库：近期不会被频繁调度。利用大容量SATA盘，性能适中的控制器。</p>
</li>
<li><p>带库或者光盘库。几年甚至几十年都不访问到。<br><img src="http://upload-images.jianshu.io/upload_images/1323506-aa2e8744e3bad56e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
</li>
</ol>
<h2 id="备份通路"><a href="#备份通路" class="headerlink" title="备份通路"></a>备份通路</h2><h3 id="本地备份"><a href="#本地备份" class="headerlink" title="本地备份"></a>本地备份</h3><p><strong>数据流向</strong>：本地磁盘——总线——磁盘控制器——总线——内存——总线——磁盘控制器——总线——本地磁盘</p>
<p>也即数据从本地磁盘出发，经过本地的总线 和内存，经过CPU少量控制逻辑代码之后，流回本地磁盘。</p>
<h3 id="通过前端网络备份"><a href="#通过前端网络备份" class="headerlink" title="通过前端网络备份"></a>通过前端网络备份</h3><p>经过前端网络备份的数据流向是：<br>本地磁盘——总线——磁盘控制器——总线——内存——总线——以太网卡——网线——以太网——网线——目标计算机的网卡——总线——内存——总线——目标计算机的磁盘。</p>
<p><strong>数据从本地磁盘出发，流经本地总线和内存，然后流到本地网卡，通过网络传送到目标计算机磁盘。</strong></p>
<ul>
<li><p>前端网络：服务器接受客户端连接的网络，也就是<strong>服务网络</strong>，是服务器和客户端连接的必经之路。</p>
</li>
<li><p>后端网络：对客户封闭，客户的连接不用经过这个网络，用与服务器和存储、应用服务器、数据库服务器的连接。可以是SAN，以太网</p>
</li>
</ul>
<h3 id="通过后端网络备份"><a href="#通过后端网络备份" class="headerlink" title="通过后端网络备份"></a>通过后端网络备份</h3><p>通过后端网络备份的数据流向是：<br>本地磁盘——总线——控制器——总线——内存——总线——后端HBA卡——线缆——后端交换设备——线缆——备份目的的后端网卡——总线——内存——磁盘</p>
<h3 id="LAN-Free备份"><a href="#LAN-Free备份" class="headerlink" title="LAN Free备份"></a>LAN Free备份</h3><p>备份的时候不经过LAN，也就是不流经前端网络，也叫<code>Frontend Free</code>。这样的好处是<strong>不耗费前端网络的带宽，对客户终端接受服务器的数据不影响。</strong>。</p>
<p>因为前端网络一般是是慢速网络 ，资源非常珍贵。无论是本地、还是网络，都需要待备份的服务器付出代价，即需要读取备份源数据到自身的内存，然后从内存写入备份的目的地。对主机CPU、内存都有浪费。</p>
<p>能否不消耗服务器的性能呢？可以，使用Server Free备份。</p>
<h3 id="Server-Free备份"><a href="#Server-Free备份" class="headerlink" title="Server Free备份"></a>Server Free备份</h3><p> Server Free备份：备份的时候，数据不用流经服务器的总线和内存，消耗极少，甚至不消耗主机资源。</p>
<p>备份源和备份目标都不会在服务器上，因为如果在服务器上，数据从磁盘读出，要流将总线，然后到内存，这就不是<code>Server Free</code></p>
<p>那怎么做呢？</p>
<ul>
<li>用<code>SCSI</code>的扩展复制命令，将这些命令发送给支持<strong>Server Free的存储设备</strong>，然后这些设备会提取自身的数据写入备份目的设备，而不是发送给主机。</li>
<li>使用另一台专门做数据移动的<strong>新服务器</strong>，来代替原来服务器移动备份数据。释放运算压力很大的生产服务器。</li>
</ul>
<h2 id="备份策略"><a href="#备份策略" class="headerlink" title="备份策略"></a>备份策略</h2><blockquote>
<p>备份引擎：决定整个数据备份系统应该怎么运作，备份那些内容，什么时候开始备份，备份时间有没有限制等的策略。</p>
</blockquote>
<h3 id="备份服务器"><a href="#备份服务器" class="headerlink" title="备份服务器"></a>备份服务器</h3><p>备份引擎以什么形式体现呢？当然是运行在<strong>主机上的程序</strong>，所以需要一台计算机来做引擎的执行者。</p>
<p>那么备份服务器的备份策略和规则，怎么传给整个数据备份系统中的服务器？通过以太网，因为以太网扩展性好，适合节点间通信。相对于以太网，SAN更适合传送大量的数据。所以<strong>常用前端网络来连接待备份的服务器和备份服务器，因为备份策略的数据包不多。</strong></p>
<p>备份服务器如何与每个待备份的服务器建立通话？怎么通话？规则怎么定？需要待备份服务器上运行一个<strong>代理程序</strong>，专门解释备份服务器发来的命令，根据命令作出动作。</p>
<p>这个运行在待备份服务器上的程序，就叫<strong>备份代理</strong>，监听端口，接收备份服务器发来的命令。</p>
<h3 id="介质服务器"><a href="#介质服务器" class="headerlink" title="介质服务器"></a>介质服务器</h3><p>若数据备份系统中有一台SCSI磁带机，且多台主机想备份到这台磁带机上。而SCSI磁带机只能同时接到一台主机上。</p>
<p>那么怎么办呢？可以引入一台专门的计算机，只能由这台计算机来操作磁带机。<br>需要备份的计算机通过以太网将数据发给这台<strong>掌管磁带机的计算机</strong>，然后写给磁带机。</p>
<p>这样磁带机成为了公用设备，而在整个系统中，只有一台计算机能掌管备份目标，它就类似于一个<strong>代理</strong>，代理其他服务器执行备份。我们把它称为<code>介质服务器</code></p>
<p>还有一个问题，如果有多台服务器向<strong>介质服务器</strong>发出请求，怎么办?当然需要一个<code>协调员</code>，也就是<strong>备份服务器</strong>，它可以指挥安装在待备份服务器的<strong>代理</strong>，让每台服务器按照顺序有条理的使用<strong>介质服务器</strong>提供的备份介质进行备份。</p>
<h2 id="三种备份方式"><a href="#三种备份方式" class="headerlink" title="三种备份方式"></a>三种备份方式</h2><h3 id="完全备份"><a href="#完全备份" class="headerlink" title="完全备份"></a>完全备份</h3><p>不管文件多大，只要要备份，都需要将文件都备份下来。</p>
<h3 id="差量备份"><a href="#差量备份" class="headerlink" title="差量备份"></a>差量备份</h3><p>差量备份：只备份从上次完全备份以来发生<strong>变化</strong>的数据。</p>
<p>差量备份<strong>要求必须做一次完全备份，作为差量的基准点</strong></p>
<h3 id="增量备份"><a href="#增量备份" class="headerlink" title="增量备份"></a>增量备份</h3><p>只备份从上次备份以来这份文件中<strong>变化过</strong>的数据。** 上次备份**，不管是全备、差备，还是增量备份。</p>
<p>对于数据库的备份，备份软件想知道每个数据文件的变化是不可能的，因为数据库文件内部格式非常复杂，只有自己才能分析和检测出来。所以数据库管理软件有自己的备份工具。<strong>第三方备份软件只能调用数据库软件自身提供的命令。</strong><br><img src="http://upload-images.jianshu.io/upload_images/1323506-356bfab5550fb50a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>

    </div>

    
    
    

      <footer class="post-footer">

        

          <div class="post-nav">
            <div class="post-nav-next post-nav-item">
                <a href="/2019/11/15/%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%8811%E7%AB%A0%EF%BC%89%EF%BC%8CTCP-IP/" rel="next" title="大话存储，学习笔记（11章），TCP-IP">
                  <i class="fa fa-chevron-left"></i> 大话存储，学习笔记（11章），TCP-IP
                </a>
            </div>

            <span class="post-nav-divider"></span>

            <div class="post-nav-prev post-nav-item">
                <a href="/2019/11/15/%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%8815%E7%AB%A0%EF%BC%89%EF%BC%8C%E5%AF%B9%E8%B1%A1%E5%AD%98%E5%82%A8/" rel="prev" title="大话存储，学习笔记（15章），对象存储">
                  大话存储，学习笔记（15章），对象存储 <i class="fa fa-chevron-right"></i>
                </a>
            </div>
          </div>
      </footer>
    
  </article>
  
  
  

  </div>


          </div>
          

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          Table of Contents
        </li>
        <li class="sidebar-nav-overview">
          Overview
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
          <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#数据保护"><span class="nav-number">1.</span> <span class="nav-text">数据保护</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#文件级备份"><span class="nav-number">1.1.</span> <span class="nav-text">文件级备份</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#块级备份"><span class="nav-number">1.2.</span> <span class="nav-text">块级备份</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#高级数据保护"><span class="nav-number">2.</span> <span class="nav-text">高级数据保护</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#远程文件复制"><span class="nav-number">2.1.</span> <span class="nav-text">远程文件复制</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#远程卷镜像"><span class="nav-number">2.2.</span> <span class="nav-text">远程卷镜像</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#快照"><span class="nav-number">2.3.</span> <span class="nav-text">快照</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#基于文件系统的快照"><span class="nav-number">2.3.1.</span> <span class="nav-text">基于文件系统的快照</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#基于物理卷的快照"><span class="nav-number">2.3.2.</span> <span class="nav-text">基于物理卷的快照</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#RoFW-方式与CoFW方式比较"><span class="nav-number">2.3.3.</span> <span class="nav-text">RoFW 方式与CoFW方式比较</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#快照的意义"><span class="nav-number">2.3.4.</span> <span class="nav-text">快照的意义</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#卷Clone"><span class="nav-number">2.4.</span> <span class="nav-text">卷Clone</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#数据备份系统的基本要件"><span class="nav-number">3.</span> <span class="nav-text">数据备份系统的基本要件</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#备份目的"><span class="nav-number">3.1.</span> <span class="nav-text">备份目的</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#备份到本地磁盘"><span class="nav-number">3.1.1.</span> <span class="nav-text">备份到本地磁盘</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#备份到SAN上的磁盘"><span class="nav-number">3.1.2.</span> <span class="nav-text">备份到SAN上的磁盘</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#备份到NAS目录"><span class="nav-number">3.1.3.</span> <span class="nav-text">备份到NAS目录</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#备份到磁带库"><span class="nav-number">3.1.4.</span> <span class="nav-text">备份到磁带库</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#信息生命周期管理"><span class="nav-number">3.1.5.</span> <span class="nav-text">信息生命周期管理</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#分级存储"><span class="nav-number">3.1.6.</span> <span class="nav-text">分级存储</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#备份通路"><span class="nav-number">3.2.</span> <span class="nav-text">备份通路</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#本地备份"><span class="nav-number">3.2.1.</span> <span class="nav-text">本地备份</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#通过前端网络备份"><span class="nav-number">3.2.2.</span> <span class="nav-text">通过前端网络备份</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#通过后端网络备份"><span class="nav-number">3.2.3.</span> <span class="nav-text">通过后端网络备份</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#LAN-Free备份"><span class="nav-number">3.2.4.</span> <span class="nav-text">LAN Free备份</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#Server-Free备份"><span class="nav-number">3.2.5.</span> <span class="nav-text">Server Free备份</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#备份策略"><span class="nav-number">3.3.</span> <span class="nav-text">备份策略</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#备份服务器"><span class="nav-number">3.3.1.</span> <span class="nav-text">备份服务器</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#介质服务器"><span class="nav-number">3.3.2.</span> <span class="nav-text">介质服务器</span></a></li></ol></li><li class="nav-item nav-level-2"><a class="nav-link" href="#三种备份方式"><span class="nav-number">3.4.</span> <span class="nav-text">三种备份方式</span></a><ol class="nav-child"><li class="nav-item nav-level-3"><a class="nav-link" href="#完全备份"><span class="nav-number">3.4.1.</span> <span class="nav-text">完全备份</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#差量备份"><span class="nav-number">3.4.2.</span> <span class="nav-text">差量备份</span></a></li><li class="nav-item nav-level-3"><a class="nav-link" href="#增量备份"><span class="nav-number">3.4.3.</span> <span class="nav-text">增量备份</span></a></li></ol></li></ol></li></ol></div>
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
  <p class="site-author-name" itemprop="name">dy2903</p>
  <div class="site-description" itemprop="description"></div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">20</span>
          <span class="site-state-item-name">posts</span>
        </a>
      </div>
      <div class="site-state-item site-state-tags">
        <span class="site-state-item-count">2</span>
        <span class="site-state-item-name">tags</span>
      </div>
  </nav>
</div>
  <div class="feed-link motion-element">
    <a href="/atom.xml" rel="alternate">
      <i class="fa fa-rss"></i>RSS
    </a>
  </div>



      </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2019</span>
  <span class="with-love">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">dy2903</span>
</div>
  <div class="powered-by">Powered by <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> v4.0.0
  </div>
  <span class="post-meta-divider">|</span>
  <div class="theme-info">Theme – <a href="https://pisces.theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Pisces</a> v7.5.0
  </div>

        












        
      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>
<script src="/js/utils.js"></script><script src="/js/motion.js"></script>
<script src="/js/schemes/pisces.js"></script>
<script src="/js/next-boot.js"></script>



  
















  

  

</body>
</html>
